In modern data systems, data typically is structured and serialized before being transmitted over network connections (e.g., between servers and web applications). Serialization is a process of converting a data structure (a.k.a. object) or object state into a format that is capable of being stored and subsequently recreated. For instance, the resulting serialized data can be used to create a semantically identical clone of the original object.
A variety of formats has been proposed for structuring data and serializing objects. However, each such format has its limitations. One commonly-used format for structuring data and serializing objects is known as JavaScript Object Notation (JSON). The limitations of JSON are common among many of the other formats that have been proposed. One example of such a limitation is that JSON does not allow serialization of host objects. While unsupported data types may be converted and represented as some other data format, a universally recognized conversion algorithm typically does not exist. Accordingly, the sender of the data and the receiver of the data often coordinate to determine how such a conversion is to occur. Moreover, JSON is not capable of making a deep copy of an object. Rather, JSON makes shallow copies of objects. A deep copy of an object is a copy that includes references to other objects that are included in the original object. The deep clone may further include copies of the objects that are included in the original object. A shallow copy of an object is a copy that includes copies of other objects (but not references to the other objects) that are included in the original object. Furthermore, JSON does not track such references.